class GanZhi {
  int get tianGan {
    throw UnimplementedError('unknown');
  }

  int get diZhi {
    throw UnimplementedError('unknown');
  }
}

class SiZhu {
  GanZhi get nianGanZhi {
    throw UnimplementedError('unknown');
  }

  GanZhi get monthGanZhi {
    throw UnimplementedError('unknown');
  }

  GanZhi get dayGanZhi {
    throw UnimplementedError('unknown');
  }

  GanZhi get hourGanZhi {
    throw UnimplementedError('unknown');
  }
}

class CangGan {
  int get num {
    throw UnimplementedError('unknown');
  }

  int indexOf(int index) {
    throw UnimplementedError('unknown');
  }
}

//================================================================================
class YunItem {
  int get old {
    throw UnimplementedError('unknown');
  }

  int get year {
    throw UnimplementedError('unknown');
  }

  GanZhi get ganZhi {
    throw UnimplementedError('unknown');
  }
}

class YunItemList {
  int get num {
    throw UnimplementedError('unknown');
  }

  YunItem indexOf(int index) {
    throw UnimplementedError('unknown');
  }
}

//================================================================================
class LiuMonth {
  double get time {
    throw UnimplementedError('unknown');
  }

  int get jieLinIndex {
    throw UnimplementedError('unknown');
  }

  GanZhi get ganZhi {
    throw UnimplementedError('unknown');
  }

  int get year {
    throw UnimplementedError('unknown');
  }

  int get day {
    throw UnimplementedError('unknown');
  }

  int get month {
    throw UnimplementedError('unknown');
  }
}

class LiuMonthList {
  int get num {
    throw UnimplementedError('unknown');
  }

  LiuMonth indexOf(int index) {
    throw UnimplementedError('unknown');
  }
}

//================================================================================
class LiuRi {
  int get year {
    throw UnimplementedError('unknown');
  }

  int get day {
    throw UnimplementedError('unknown');
  }

  int get month {
    throw UnimplementedError('unknown');
  }

  GanZhi get ganZhi {
    throw UnimplementedError('unknown');
  }
}

class LiuRiList {
  int get num {
    throw UnimplementedError('unknown');
  }

  LiuRi indexOf(int index) {
    throw UnimplementedError('unknown');
  }
}

//==================================流时==============================================
class LiuShi {
  int get startHour {
    throw UnimplementedError('unknown');
  }

  int get endHour {
    throw UnimplementedError('unknown');
  }

  GanZhi get ganZhi {
    throw UnimplementedError('unknown');
  }
}

class LiuShiList {
  int get num {
    throw UnimplementedError('unknown');
  }

  LiuShi indexOf(int index) {
    throw UnimplementedError('unknown');
  }
}

//================================================================================
class SiZhuInfo {
  SiZhu get siZhu {
    throw UnimplementedError('unknown');
  }

  int naYinOf(int index) {
    throw UnimplementedError('unknown');
  }

  int wuXingOf(int index, int index2) {
    throw UnimplementedError('unknown');
  }

  int shiShenOf(int index, int index2) {
    throw UnimplementedError('unknown');
  }

  CangGan cangGanOf(int index) {
    throw UnimplementedError('unknown');
  }

  int cangGanWuxingOf(int index, int index2) {
    throw UnimplementedError('unknown');
  }

  int cangGanShiShenOf(int index, int index2) {
    throw UnimplementedError('unknown');
  }
}

//========================================================================================
class BaZiInfo {
  YunItemList get dayun {
    throw UnimplementedError('unknown');
  }

  YunItem get xiaoYun {
    throw UnimplementedError('unknown');
  }

  int get currentYearOld {
    throw UnimplementedError('unknown');
  }

  double get startYun {
    throw UnimplementedError('unknown');
  }

  double get preJieLinJd {
    throw UnimplementedError('unknown');
  }

  int get preJieLinIndex {
    throw UnimplementedError('unknown');
  }

  double get nextJieLinJd {
    throw UnimplementedError('unknown');
  }

  int get nextJieLinIndex {
    throw UnimplementedError('unknown');
  }

  int get startYunFromBornYear {
    throw UnimplementedError('unknown');
  }

  int get startYunFromBornMonth {
    throw UnimplementedError('unknown');
  }

  int get startYunFromBornDay {
    throw UnimplementedError('unknown');
  }

  int get jiaoYunTg1 {
    throw UnimplementedError('unknown');
  }

  int get jiaoYunTg2 {
    throw UnimplementedError('unknown');
  }

  int get jiaoYunJieIndex {
    throw UnimplementedError('unknown');
  }

  int get jiaoYunJieDay {
    throw UnimplementedError('unknown');
  }

  String get nexJieLinStr {
    throw UnimplementedError('unknown');
  }

  String get preJieLinStr {
    throw UnimplementedError('unknown');
  }

  int get preJqDisDay {
    throw UnimplementedError('unknown');
  }

  int get nextJqDisDay {
    throw UnimplementedError('unknown');
  }

  String get startYunStr {
    throw UnimplementedError('unknown');
  }

  // 命宫
  GanZhi get mingGong {
    throw UnimplementedError('unknown');
  }

  //身宫
  GanZhi get shengGong {
    throw UnimplementedError('unknown');
  }

  //胎元
  GanZhi get taiYuan {
    throw UnimplementedError('unknown');
  }

  //胎息
  GanZhi get taiXi {
    throw UnimplementedError('unknown');
  }
}

//========================================================================================

class WuXingList {
  int get num {
    throw UnimplementedError('unknown');
  }

  int indexOf(int index) {
    throw UnimplementedError('unknown');
  }
}

//========================================================================================
class BaZi {
  SiZhu getSiZhuBySolar(
      {required int nian,
      required int yue,
      required int ri,
      required int hour,
      int min = 0,
      int second = 0}) {
    throw UnimplementedError('unknown');
  }

  SiZhu getSiZhuByLunar(
      {required int nian,
      required int yue,
      required int ri,
      required int hour,
      int min = 0,
      int second = 0,
      bool isRun = false}) {
    throw UnimplementedError('unknown');
  }

  SiZhuInfo getShiZhuInfo(SiZhu siZhu) {
    throw UnimplementedError('unknown');
  }

  BaZiInfo getPan(
      {required int nian,
      required int yue,
      required int ri,
      required int hour,
      int min = 0,
      int xingBie = 1,
      bool isYin = false,
      bool isRun = false}) {
    throw UnimplementedError('unknown');
  }

  YunItemList getLiuNian(int year, int old, int num) {
    throw UnimplementedError('unknown');
  }

  LiuMonthList getLiuYue(int year) {
    throw UnimplementedError('unknown');
  }

  LiuRiList getLiuRi(int year, int month, int day) {
    throw UnimplementedError('unknown');
  }

  LiuShiList getLiuShi(int dayTg, bool isZhaoZhiShi) {
    throw UnimplementedError('unknown');
  }
}

//========================================================================================
class BaZiUtils {
  // 获取天干的五行属性
  static int getDiZhiWuXing(int dz) {
    throw UnimplementedError('unknown');
  }

// 获取地支的五行属性
  static int getTianGanWuXing(int tg) {
    throw UnimplementedError('unknown');
  }

// 获取天干的阴阳属性
  static int getDiZhiYinYang(int dz) {
    throw UnimplementedError('unknown');
  }

// 获取地支的阴阳属性
  static int getTianGanYinYang(int tg) {
    throw UnimplementedError('unknown');
  }

// 获取地支藏干
  static CangGan getDiZhiChangGan(int dz) {
    throw UnimplementedError('unknown');
  }

// 获取天干的五行纳音值
  // static int getGanZhiNaYin(GanZhi ganZhi) {
  //   return _bindings.Utils_getGanZhiNaYin(ganZhi.ptr);
  // }

  static int getGanZhiNaYin(int tg, int dz) {
    throw UnimplementedError('unknown');
  }

// 获取天干的索引
  static int getGanZhiIndex(GanZhi ganZhi) {
    throw UnimplementedError('unknown');
  }

// 获取天干的十神关系
  static int getTianGanShiShen(int tg, int minZhu) {
    throw UnimplementedError('unknown');
  }

// 获取地支十神关系
  static int getDiZhiShiShen(int dz, int minZhu) {
    throw UnimplementedError('unknown');
  }

// 旺相
  static WuXingList wangXiang(int yueDz) {
    throw UnimplementedError('unknown');
  }

// 十二长生
  static int getChangeShen(int tg, int dz) {
    throw UnimplementedError('unknown');
  }

// 获取空亡
  static int getXunIndex(int tg, int dz) {
    throw UnimplementedError('unknown');
  }

  // 获取司令
  static int getSiLin(int index, int preJieIndex, int preJieDay) {
    throw UnimplementedError('unknown');
  }
}

//========================================================================================
class TianGanValueList {
  int get num {
    throw UnimplementedError('unknown');
  }

  int indexOf(int index) {
    throw UnimplementedError('unknown');
  }
}

class TgCondMap {
  int get num {
    throw UnimplementedError('unknown');
  }

  int keyIndexOf(int index) {
    throw UnimplementedError('unknown');
  }

  IntList valueIndexOf(int index) {
    throw UnimplementedError('unknown');
  }
}

class DzCondMap {
  int get num {
    throw UnimplementedError('unknown');
  }

  int keyIndexOf(int index) {
    throw UnimplementedError('unknown');
  }

  IntList valueIndexOf(int index) {
    throw UnimplementedError('unknown');
  }
}

//========================================================================================
class DiZhiValueList {
  int get num {
    throw UnimplementedError('unknown');
  }

  int indexOf(int index) {
    throw UnimplementedError('unknown');
  }
}

//========================================================================================
class IntList {
  int get num {
    throw UnimplementedError('unknown');
  }

  int indexOf(int index) {
    throw UnimplementedError('unknown');
  }
}

//===================================合=====================================================
class HeData {
  late bool needDispose;
  HeData({
    this.needDispose = true,
  });

  int get wuxing {
    throw UnimplementedError('unknown');
  }

  TianGanValueList get tgCondList {
    throw UnimplementedError('unknown');
  }

  DiZhiValueList get dzCondList {
    throw UnimplementedError('unknown');
  }

  TgCondMap get tgCondMapIndex {
    throw UnimplementedError('unknown');
  }

  DzCondMap get dzCondMapIndex {
    throw UnimplementedError('unknown');
  }
}

class AnHeUtils {
  AnHeUtils({required List<int> dzList}) {
    throw UnimplementedError('unknown');
  }

  // 子辰暗合
  HeData get ziChen {
    throw UnimplementedError('unknown');
  }

  // 子戌暗合
  HeData get ziXu {
    throw UnimplementedError('unknown');
  }

  // 寅丑暗合
  HeData get yinChou {
    throw UnimplementedError('unknown');
  }

  // 寅未暗合
  HeData get yinWei {
    throw UnimplementedError('unknown');
  }

  // 卯申暗合
  HeData get maoShen {
    throw UnimplementedError('unknown');
  }

  // 巳西暗合
  HeData get jiYou {
    throw UnimplementedError('unknown');
  }

  // 午亥暗合
  HeData get wuHai {
    throw UnimplementedError('unknown');
  }
}

class LiuHeUtils {
  LiuHeUtils({required List<int> dzList}) {
    throw UnimplementedError('unknown');
  }

  // 子辰暗合
  HeData get ziChou {
    throw UnimplementedError('unknown');
  }

  // 寅亥合
  HeData get yinHai {
    throw UnimplementedError('unknown');
  }

  // 卯戌合
  HeData get maoXu {
    throw UnimplementedError('unknown');
  }

  // 巳申合
  HeData get siShen {
    throw UnimplementedError('unknown');
  }

  // 午未合
  HeData get wuWei {
    throw UnimplementedError('unknown');
  }

  // 辰酉合
  HeData get chenYou {
    throw UnimplementedError('unknown');
  }
}

// 三合
// 申子辰三合水局，亥卯未三合木局，寅午戌三合火局，巳酉丑三合金局。
class SanHeUtils {
  SanHeUtils({required List<int> dzList}) {
    throw UnimplementedError('unknown');
  }

  // 申子辰
  HeData get shenZiChen {
    throw UnimplementedError('unknown');
  }

  // 巳酉丑
  HeData get siYouChou {
    throw UnimplementedError('unknown');
  }

  // 寅午戌
  HeData get yinWuXu {
    throw UnimplementedError('unknown');
  }

  // 亥卯未
  HeData get haiMaoWei {
    throw UnimplementedError('unknown');
  }
}

// 天地合
// 甲丑暗合  甲未暗合  乙申暗合 丙酉暗合  丁亥暗合  戊子暗合  己寅暗合 庚卯暗合  辛巳暗合  壬午暗合  癸辰暗合  癸戌暗合
class TianDiUtils {
  TianDiUtils({required List<int> tgList, required List<int> dzList}) {
    throw UnimplementedError('unknown');
  }

  dispose() {
    throw UnimplementedError('unknown');
  }

  // 甲丑暗合
  HeData get jiaChou {
    throw UnimplementedError('unknown');
  }

  // 甲未暗合
  HeData get jiaWei {
    throw UnimplementedError('unknown');
  }

  // 乙申暗合
  HeData get yiShen {
    throw UnimplementedError('unknown');
  }

  // 丙酉暗合
  HeData get bingYou {
    throw UnimplementedError('unknown');
  }

  // 丁亥暗合
  HeData get dingHai {
    throw UnimplementedError('unknown');
    ;
  }

  // 戊子暗合
  HeData get wuZi {
    throw UnimplementedError('unknown');
  }

  // 己寅暗合
  HeData get jiYin {
    throw UnimplementedError('unknown');
  }

  // 庚卯暗合
  HeData get gengMao {
    throw UnimplementedError('unknown');
  }

  // 辛巳暗合
  HeData get xinSi {
    throw UnimplementedError('unknown');
  }

  // 壬午暗合
  HeData get renWu {
    throw UnimplementedError('unknown');
  }

  // 癸辰暗合
  HeData get guiChen {
    throw UnimplementedError('unknown');
  }

  // 癸戌暗合
  HeData get guiXu {
    throw UnimplementedError('unknown');
  }
}

// 五合
// 甲己 - 中正土  乙庚 - 仁义金  丙辛 - 威制水  丁壬 - 淫慝木  戊癸 - 无情火
//
// 八字五合有：甲己合、乙庚合、丙辛合、丁壬合以及戊癸合。
//
// 甲己合化土：甲木属于阳木，在八卦中属于“巽卦”，己土属于阴土，在八卦中属于“坤卦”，两者的结合是一种阴阳互根互助的结合。
// 乙庚合化金：乙木属于阴木，在八卦中属于“坤卦”，庚金属于阳金，在八卦中属于“兑卦”，两者的结合是一种阴与阳的结合。
// 丙辛合化水：丙火属于阳火，在八卦中属于“离卦”，辛金属于阴金，在八卦中属于“艮卦”，两者的结合是一种阴阳结合。
// 丁壬合化木：丁火属于阴火，在八卦中属于“兑卦”，壬水属于阳水，在八卦中属于“坎卦”，两者的结合是一种阴阳结合。
// 戊癸合化火：戊土属于阳土，在八卦中属于“离卦”，癸水属于阴水，在八卦中属于“乾卦”，两者的结合是一种阴阳结合。

class WuHeUtils {
  WuHeUtils({required List<int> tgList}) {
    throw UnimplementedError('unknown');
  }

  // 甲己合
  HeData get jiaJi {
    throw UnimplementedError('unknown');
  }

  // 乙庚合
  HeData get yiGeng {
    throw UnimplementedError('unknown');
  }

  // 丙辛合
  HeData get bingXin {
    throw UnimplementedError('unknown');
  }

  // 丁壬合
  HeData get dingRen {
    throw UnimplementedError('unknown');
  }

  // 戊癸合
  HeData get wuGui {
    throw UnimplementedError('unknown');
  }
}

//=====================================冲===================================================
class ChongData {
  TianGanValueList get tgCondList {
    throw UnimplementedError('unknown');
  }

  DiZhiValueList get dzCondList {
    throw UnimplementedError('unknown');
  }

  TgCondMap get tgCondMapIndex {
    throw UnimplementedError('unknown');
  }

  DzCondMap get dzCondMapIndex {
    throw UnimplementedError('unknown');
  }
}

class AnChongUtils {
  AnChongUtils({required List<int> tgList, required List<int> dzList}) {
    throw UnimplementedError('unknown');
  }

  // 甲申暗冲
  ChongData get jiaShen {
    throw UnimplementedError('unknown');
  }

  // 乙西暗冲
  ChongData get yiYou {
    throw UnimplementedError('unknown');
  }

  // 丙亥暗冲
  ChongData get bingHai {
    throw UnimplementedError('unknown');
  }

  // 丁子暗冲
  ChongData get dingZi {
    throw UnimplementedError('unknown');
  }

  // 庚寅暗冲
  ChongData get genYin {
    throw UnimplementedError('unknown');
  }

  // 辛卯暗冲
  ChongData get xinMao {
    throw UnimplementedError('unknown');
  }

  // 壬巳暗冲
  ChongData get renSi {
    throw UnimplementedError('unknown');
  }

  // 癸午暗冲
  ChongData get guiWu {
    throw UnimplementedError('unknown');
  }
}

class LiuChongUtils {
  LiuChongUtils({required List<int> dzList}) {
    throw UnimplementedError('unknown');
  }

  // 子午冲
  ChongData get ziWu {
    throw UnimplementedError('unknown');
  }

  // 丑未冲
  ChongData get chouWei {
    throw UnimplementedError('unknown');
  }

  // 寅申冲
  ChongData get yinShen {
    throw UnimplementedError('unknown');
  }

  // 卯酉冲
  ChongData get maoYou {
    throw UnimplementedError('unknown');
  }

  // 辰戌冲
  ChongData get chenXu {
    throw UnimplementedError('unknown');
  }

  // 巳亥冲
  ChongData get siHai {
    throw UnimplementedError('unknown');
  }
}

class SiChongUtils {
  SiChongUtils() {
    throw UnimplementedError('unknown');
  }

  // 甲庚冲
  ChongData get jiaGeng {
    throw UnimplementedError('unknown');
  }

  // 乙辛冲
  ChongData get yiXing {
    throw UnimplementedError('unknown');
  }

  // 丙壬冲
  ChongData get bingRen {
    throw UnimplementedError('unknown');
  }

  // 丁癸冲
  ChongData get dingGui {
    throw UnimplementedError('unknown');
  }
}

//=====================================会===================================================
class HuiData {
  late bool needDispose;
  HuiData({
    this.needDispose = true,
  });

  TianGanValueList get tgCondList {
    throw UnimplementedError('unknown');
  }

  DiZhiValueList get dzCondList {
    throw UnimplementedError('unknown');
  }

  TgCondMap get tgCondMapIndex {
    throw UnimplementedError('unknown');
  }

  DzCondMap get dzCondMapIndex {
    throw UnimplementedError('unknown');
  }
}

class SanHuiUtils {
  SanHuiUtils({required List<int> dzList}) {
    throw UnimplementedError('unknown');
  }

  // 寅卯辰
  HuiData get yinMaoChen {
    throw UnimplementedError('unknown');
  }

  // 已午未
  HuiData get siWuWei {
    throw UnimplementedError('unknown');
  }

  // 申西戌
  HuiData get shenYouXu {
    throw UnimplementedError('unknown');
  }

  // 亥子丑
  HuiData get haiZiChou {
    throw UnimplementedError('unknown');
  }
}
